package com.itheima.util;

import com.itheima.exception.NotNullException;
import com.itheima.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/***    异常统一处理工具类
*       类上添加注解
*       @RestControllerAdvice
*       1)会将该注解所在的类交给Spring的IOC容器管理
*       2)该注解所在的类的方法响应数据格式是JSON格式
*       3)加该注解的类，会拦截所有Controller层方法的异常（方法上有@GetMapping、@PostMapping、@XxxMapping）
*       4)该类拦截后，会将异常交给带有@ExceptionHandler注解的方法处理,该注解可以指定方法要处理的异常类型
*/
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {


    /***
     * 异常处理方法
     */
    //@ExceptionHandler(value = {NullPointerException.class})
    @ExceptionHandler(value = {NumberFormatException.class})  //当前方法处理的异常类型
    public Result handlerException(IllegalArgumentException ex){ //接收指定的异常->
        log.error("程序异常:{}",ex);
        return Result.error("服务器异常，请稍后再重试！");
    }

    /***
     * 数据非空异常处理
     */
    @ExceptionHandler(value = {NotNullException.class})
    public Result handlerException(NotNullException ex){
        log.error("程序异常:{}",ex);
        return Result.error(ex.getMessage());
    }
}